package imperio.controlador;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */



import imperio.comparators.TimeComparator;
import imperio.eventos.Evento;
import imperio.population.Individuo;
import imperio.simulador.Simulador;
import java.util.Iterator;
import java.util.TreeSet;

/**
 *
 * @author Bernardo
 */
public class Cap {

    public static TreeSet<Evento> listaEventos;
    private static Cap cap2;
    public static int countEv;

    public static Cap getInstance() {
        if (cap2 == null) {
            cap2 = new Cap();
        }
        return cap2;
    }

    private Cap() {
        listaEventos = new TreeSet<Evento>(new TimeComparator());
        countEv = 0;
    }

    /**Método para inserção de eventos na lista de eventos.
     * 
     * @param  ev Evento - Evento a ser adicionado.  
     *     
     */
    public static void adcionarEvCap(Evento ev) {
        listaEventos.add(ev);       
    }
    
    /**Método para remoção de eventos, relacionados a um individuo, da lista de eventos.
     * 
     * @param  individuo Individuo - Individuo a ter os futuros eventos retirados da Cap.  
     *     
     */

    public static void removerEvCap(Individuo individuo) {
        Iterator<Evento> iterator;
        iterator = listaEventos.iterator();        
        while (iterator.hasNext()){
        Evento ev = iterator.next();            
            if (ev.getIndividuo() != null && ev.getIndividuo().equals(individuo) ) {
                //listaEventos.remove(ev);  java.util.ConcurrentModificationException
                iterator.remove();
            } 
        }               
    }
    
    /**Método para remoção do próximo evento a ser executado.
        
     */

    public static void removerEvCap() {
        countEv++;    
        Simulador.eventoCorrente = listaEventos.first();                
        listaEventos.remove(listaEventos.first());
    }
  
}